import javax.swing.*;

public class Game {
    /*
    3、在一个游戏中，有盗贼，猎人，医生，农民，士兵几类人，这些人都有名称、等级，还可以自己介绍自己；
  其中，
      盗贼可以偷盗。
      猎人可以打猎。
      农民可以采矿。
      盗贼、猎人和农民可以攻击。
      农民、医生可以治疗。
      士兵可以抵抗盗贼、猎人和农民等的攻击。
       还有一个玩家可以控制这些角色。
     设计这个系统。
     */

    public static void main(String[] args) {
        User user = new User();
        user.control();
    }
}


class User{


    public void control(){
        String name = JOptionPane.showInputDialog(null,"输入你要选择的角色名字\n盗贼\n农民\n医生\n士兵\n猎人");
        if(!(name.equals("盗贼")||name.equals("医生")||name.equals("农民")||name.equals("猎人")||name.equals("士兵"))){
            JOptionPane.showMessageDialog(null,"选择角色有误");
            return;
        }

        int rank = 1;
        String SkillName;

        if (name.equals("盗贼")){
            SkillName = "我可以偷盗和攻击!";
            Robe r = new Robe(name,rank,SkillName);

            String item = JOptionPane.showInputDialog(null,"选择要进行的操作\n1-偷盗\n2-攻击\n3-角色介绍");
            switch (item){
               case "1":
                   r.robe();
                   break;
               case "2":
                   r.hit();
                   break;
               case "3":
                   r.introduceSelf();
                   break;
            }
        }else if (name.equals("医生")){
            SkillName = "我可以治疗!";
            Doctor d = new Doctor(name,rank,SkillName);
            String item = JOptionPane.showInputDialog(null,"选择要进行的操作\n1-治疗\n2-角色介绍");
            switch (item) {
                case "1":
                    d.treat();
                    break;
                case "2":
                    d.introduceSelf();
                    break;
            }
        }else if (name.equals("农民")) {
            SkillName = "我可以采矿和攻击，还可以治疗!";
            Farmer f =new Farmer(name,rank,SkillName);

            String item = JOptionPane.showInputDialog(null,"选择要进行的操作\n1-治疗\n2-采矿\n3-攻击\n4-角色介绍");
            switch (item) {
                case "1":
                    f.treat();
                    break;
                case "2":
                    f.mining();
                    break;
                case "3":
                    f.hit();
                    break;
                case "4":
                    f.introduceSelf();
                    break;
            }
        }else if (name.equals("猎人")) {
            SkillName = "我可以打猎和攻击!";
            Hunter h =new Hunter(name,rank,SkillName);
            String item = JOptionPane.showInputDialog(null,"选择要进行的操作\n1-打猎\n2-攻击\n3-角色介绍");
            switch (item) {
                case "1":
                    h.hunt();
                    break;
                case "2":
                    h.hit();
                    break;
                case "3":
                    h.introduceSelf();
                    break;
            }
        }else {
            SkillName = "我可以抵御农民、猎人和盗贼的攻击！";
            Solider s = new Solider(name,rank,SkillName);
            String item = JOptionPane.showInputDialog(null,"选择要进行的操作\n1-防御\n2-角色介绍");
            switch (item) {
                case "1":
//                    s.fend(new Farmer().hit());
                    break;
                case "2":
                    s.introduceSelf();
                    break;
            }
        }
    }
}

class Role{
    protected String name;
    protected int rank;
    protected String skillName;

    public Role(String name, int rank, String skillName) {
        this.name = name;
        this.rank = rank;
        this.skillName = skillName;
    }
}

/**
 * 所有技能、方法接口
 */
interface IMine{
    void mining();
}
interface ISteal{
    void robe();
}
interface IHunt{
    void hunt();
}
interface ICure{
    void treat();
}
interface IAttack{
    void hit();
}
interface IDefend{
    void fend(IAttack w);
}
interface IIntroduce{
    void introduceSelf();
}

/**
 * 盗贼
 */
class Robe extends Role implements ISteal,IAttack,IIntroduce{
    public Robe(String name, int rank, String skillName) {
        super(name, rank, skillName);
    }


    @Override
    public void robe() {
        System.out.println("可以偷盗");
    }

    @Override
    public void hit() {
        System.out.println("可以攻击");
    }

    @Override
    public void introduceSelf() {
        System.out.println("姓名："+this.name+"   等级"+this.rank+"  技能："+this.skillName);
    }
}

/**
 * 猎人
 */
class Hunter extends Role implements IHunt,IAttack,IIntroduce{
    public Hunter(String name, int rank, String skillName) {
        super(name, rank, skillName);
    }


    @Override
    public void hunt() {
        System.out.println("可以打猎");
    }

    @Override
    public void hit() {
        System.out.println("可以攻击");
    }

    @Override
    public void introduceSelf() {
        System.out.println("姓名："+this.name+"   等级"+this.rank+"  技能："+this.skillName);
    }
}

/**
 * 医生
 */
class Doctor extends Role implements ICure,IIntroduce{
    public Doctor(String name, int rank, String skillName) {
        super(name, rank, skillName);
    }

    @Override
    public void treat() {
        System.out.println("可以治疗");
    }

    @Override
    public void introduceSelf() {
        System.out.println("姓名："+this.name+"   等级"+this.rank+"  技能："+this.skillName);
    }
}

/**
 * 农民
 */
class Farmer extends Role implements IMine,ICure,IIntroduce,IAttack{
    public Farmer(String name, int rank, String skillName) {
        super(name, rank, skillName);
    }

    @Override
    public void mining() {
        System.out.println("可以挖矿");
    }

    @Override
    public void treat() {
        System.out.println("可以治疗");
    }

    @Override
    public void introduceSelf() {
        System.out.println("姓名："+this.name+"   等级"+this.rank+"  技能："+this.skillName);
    }

    @Override
    public void hit() {
        System.out.println("可以攻击");
    }
}

/**
 * 士兵
 */
class Solider extends Role implements IDefend,IIntroduce{
    public Solider(String name, int rank, String skillName) {
        super(name, rank, skillName);
    }

    @Override
    public void fend(IAttack w) {
        System.out.println("防御功能，防御盗贼、猎人、农民的攻击");
    }

    @Override
    public void introduceSelf() {
        System.out.println("姓名："+this.name+"   等级"+this.rank+"  技能："+this.skillName);
    }
}